#include "trap.h"    
    .org 0x0
    .text
    .global _start
_start:
    # LU12I.W将20比特立即数si20最低位连接上12比特0后写入通用寄存器rd中 
    lu12i.w     $r4,-0x7fc00    # r4 = 0x80400000          
    # ADDI.W将通用寄存器rj中的数据加上12比特立即数si12符号扩展后的32位数据,所得结果写入通用寄存器rd中
    addi.w      $r5, $r4, -0x7fc    # r5 = 0x803ff804
    addi.w      $r6, $r4, 0x100 # r6 = 0x80400100
    addi.w      $r21,$r5, 0x7fc # r21 = 0x80400000
    # ADD.W将通用寄存器rj中的数据加上通用寄存器rk中的数据,所得结果的[31:0]位写入通用寄存器rd中
    add.w       $r7, $r4, $r6   # r7 = 0x00800100
    add.w       $r22,$r6, $r7   # r22 = 0x80c00200
    # PCADDU12I将20比特立即数si20最低位连接上12比特0之后符号扩展,所得数据加上该指令的PC,相加结果写入通用寄存器rd中
    pcaddu12i   $r8, -0x7fc00   # r8 =  0x00400018
    pcaddu12i   $r23,0          # r23 = 0x8000001c
    # ANDI将通用寄存器rj中的数据与12比特立即数零扩展之后的数据进行按位逻辑与运算,结果写入通用寄存器rd中
    andi        $r9, $r4, 0x800 # r9 = 0x00000000  
    andi        $r10, $r6, 0x100  # r10 = 0x00000100           
    # XOR将通用寄存器rj中的数据与通用寄存器rk中的数据进行按位逻辑异或运算,结果写入通用寄存器rd中
    xor         $r11, $r4, $r5      # r11 = 0x007ff804
    # SLTI将通用寄存器rj中的数据与12比特立即数si12符号扩展后所得的数据视作有符号整数进行大小比较,如果前者小于后者,则将通用寄存器rd的值置为1,否则置为0
    lu12i.w     $r12, -0x7fc00  # r12 = 0x80400000
    lu12i.w     $r13, 0x12345   # r13 = 0x12345000
    slti        $r14, $r4,-0x7ff # r14 = 0x00000001 
    slti        $r15, $r12, 0x123    # r15 = 0x00000001
    slti        $r16, $r13, -0x1    # r16 = 0x00000000
    # SRAI.W将通用寄存器rj中的数据算术右移,移位结果写入通用寄存器rd中
    srai.w       $r17, $r7, 0x1     # r17 = 0x00400080
    srai.w       $r18, $r7, 0x10      # r18 = 0x00000080
    srai.w       $r19, $r4, 0x1     # r19 = 0xc0200000
    srai.w       $r20, $r4, 0x10      # r20 = 0xffff8040
    HIT_GOOD_TRAP